package com.zenithmind.document.pojo.domain;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zenithmind.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;

/**
 * 文档实体类
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("document")
@Schema(description = "文档实体")
public class Document extends BaseEntity {

    /**
     * 文档名称
     */
    @TableField("name")
    @Schema(description = "文档名称")
    private String name;

    /**
     * 文档标题
     */
    @TableField("title")
    @Schema(description = "文档标题")
    private String title;

    /**
     * 文档描述
     */
    @TableField("description")
    @Schema(description = "文档描述")
    private String description;

    /**
     * 文档类型（pdf, doc, docx, xls, xlsx, ppt, pptx等）
     */
    @TableField("type")
    @Schema(description = "文档类型")
    private String type;

    /**
     * 文档分类ID
     */
    @TableField("category_id")
    @Schema(description = "文档分类ID")
    private String categoryId;

    /**
     * 文档标签（JSON格式）
     */
    @TableField("tags")
    @Schema(description = "文档标签（JSON格式）")
    private String tags;

    /**
     * 文件大小（字节）
     */
    @TableField("file_size")
    @Schema(description = "文件大小（字节）")
    private Long fileSize;

    /**
     * 文件路径
     */
    @TableField("file_path")
    @Schema(description = "文件路径")
    private String filePath;

    /**
     * 文件URL
     */
    @TableField("file_url")
    @Schema(description = "文件URL")
    private String fileUrl;

    /**
     * 缩略图URL
     */
    @TableField("thumbnail_url")
    @Schema(description = "缩略图URL")
    private String thumbnailUrl;

    /**
     * 预览URL
     */
    @TableField("preview_url")
    @Schema(description = "预览URL")
    private String previewUrl;

    /**
     * 文档内容（提取的文本内容）
     */
    @TableField("content")
    @Schema(description = "文档内容")
    private String content;

    /**
     * 文档摘要
     */
    @TableField("summary")
    @Schema(description = "文档摘要")
    private String summary;

    /**
     * 关键词
     */
    @TableField("keywords")
    @Schema(description = "关键词")
    private String keywords;

    /**
     * 文档状态（0:处理中, 1:正常, 2:已删除, 3:处理失败）
     */
    @TableField("status")
    @Schema(description = "文档状态（0:处理中, 1:正常, 2:已删除, 3:处理失败）")
    private Integer status;

    /**
     * 文档版本号
     */
    @TableField("version")
    @Schema(description = "文档版本号")
    private String version;

    /**
     * 父文档ID（用于版本控制）
     */
    @TableField("parent_id")
    @Schema(description = "父文档ID")
    private String parentId;

    /**
     * 是否为最新版本
     */
    @TableField("is_latest")
    @Schema(description = "是否为最新版本")
    private Integer isLatest;

    /**
     * 访问权限（0:私有, 1:公开, 2:部门, 3:指定用户）
     */
    @TableField("access_level")
    @Schema(description = "访问权限")
    private Integer accessLevel;

    /**
     * 权限配置（JSON格式）
     */
    @TableField("permission_config")
    @Schema(description = "权限配置（JSON格式）")
    private String permissionConfig;

    /**
     * 是否加密
     */
    @TableField("is_encrypted")
    @Schema(description = "是否加密")
    private Integer isEncrypted;

    /**
     * 加密算法
     */
    @TableField("encryption_algorithm")
    @Schema(description = "加密算法")
    private String encryptionAlgorithm;

    /**
     * 文档来源（1:上传, 2:创建, 3:转换, 4:导入）
     */
    @TableField("source")
    @Schema(description = "文档来源")
    private Integer source;

    /**
     * 原始文件名
     */
    @TableField("original_name")
    @Schema(description = "原始文件名")
    private String originalName;

    /**
     * MIME类型
     */
    @TableField("mime_type")
    @Schema(description = "MIME类型")
    private String mimeType;

    /**
     * MD5哈希值
     */
    @TableField("md5_hash")
    @Schema(description = "MD5哈希值")
    private String md5Hash;

    /**
     * 页数（适用于PDF等）
     */
    @TableField("page_count")
    @Schema(description = "页数")
    private Integer pageCount;

    /**
     * 字数统计
     */
    @TableField("word_count")
    @Schema(description = "字数统计")
    private Integer wordCount;

    /**
     * 语言
     */
    @TableField("language")
    @Schema(description = "语言")
    private String language;

    /**
     * 创建者ID
     */
    @TableField("creator_id")
    @Schema(description = "创建者ID")
    private String creatorId;

    /**
     * 最后修改者ID
     */
    @TableField("last_modifier_id")
    @Schema(description = "最后修改者ID")
    private String lastModifierId;

    /**
     * 下载次数
     */
    @TableField("download_count")
    @Schema(description = "下载次数")
    private Long downloadCount;

    /**
     * 查看次数
     */
    @TableField("view_count")
    @Schema(description = "查看次数")
    private Long viewCount;

    /**
     * 收藏次数
     */
    @TableField("favorite_count")
    @Schema(description = "收藏次数")
    private Long favoriteCount;

    /**
     * 评分
     */
    @TableField("rating")
    @Schema(description = "评分")
    private Double rating;

    /**
     * 评分次数
     */
    @TableField("rating_count")
    @Schema(description = "评分次数")
    private Long ratingCount;

    /**
     * 最后访问时间
     */
    @TableField("last_access_time")
    @Schema(description = "最后访问时间")
    private LocalDateTime lastAccessTime;

    /**
     * 过期时间
     */
    @TableField("expire_time")
    @Schema(description = "过期时间")
    private LocalDateTime expireTime;

    /**
     * 扩展属性（JSON格式）
     */
    @TableField("extra_properties")
    @Schema(description = "扩展属性（JSON格式）")
    private String extraProperties;
}
